package com.zeus.common.enums;

import lombok.Getter;

import java.util.Arrays;
import java.util.List;

/**
 * 宙斯报警级别枚举
 * 
 * @author f1ybear_wang  2022/2/7 6:32 下午
 */
public enum ZeusAlarmLevelEnum {
    /**
     * 未知
     */
    UN_KNOW("UN_KNOW", "未知", null, 0),

    /**
     * P0级告警
     */
    P0("P0", "P0级告警", null, 5),

    /**
     * P1级告警
     */
    P1("P1", "P1级告警", P0, 4),

    /**
     * P2级告警
     */
    P2("P2", "P2级告警", P1, 3),

    /**
     * P3级告警
     */
    P3("P3", "P3级告警", P2, 2),

    /**
     * P4级告警
     */
    P4("P4", "P4级告警", P3, 1),;

    /**
     * 编码
     */
    @Getter
    private final String code;

    /**
     * 描述
     */
    @Getter
    private final String desc;

    /**
     * 下一级别
     */
    private final ZeusAlarmLevelEnum next;

    /**
     * 基数
     */
    @Getter
    private final int baseNumber;

    /**
     * 构造
     *
     * @param code 编码
     * @param desc 描述
     * @author wangfeixiong126@gmail.com  2021/5/13 18:59
     */
    ZeusAlarmLevelEnum(String code, String desc, ZeusAlarmLevelEnum next, int baseNumber) {
        this.code = code;
        this.desc = desc;
        this.next = next;
        this.baseNumber = baseNumber;
    }

    /**
     * 根据编码获取枚举
     *
     * @param code 编码
     * @return ZeusAlarmLevelEnum
     * @author f1ybear_wang  2022/2/7 6:18 下午
     */
    public static ZeusAlarmLevelEnum parse(String code) {
        if (code == null || code.isEmpty()) {
            return null;
        }
        for (ZeusAlarmLevelEnum value : ZeusAlarmLevelEnum.values()) {
            if (value.getCode().equals(code)) {
                return value;
            }
        }
        return null;
    }

    /**
     * 获取高级别编码列表
     * 
     * @return 高级别编码列表
     * @author f1ybear_wang  2022/2/24 11:35 上午
     */
    public static List<String> getHighLevelCodeList() {
        return Arrays.asList(P0.getCode(), P1.getCode(), P2.getCode());
    }

    /**
     * 判断是否为高级别
     * 
     * @param code  编码
     * @return 是否是高级别
     * @author f1ybear_wang  2022/2/24 11:35 上午
     */
    public static boolean isHighLevel(String code) {
        return getHighLevelCodeList().contains(code);
    }

    /**
     * 获取下一级枚举
     *
     * @return 等级枚举
     * @author f1ybear_wang  2022/3/1 2:55 下午
     */
    public ZeusAlarmLevelEnum getNext() {
        if (this.next == null) {
            return this;
        }
        return this.next;
    }

}
